#ifndef BOARDFRAME_H_
#define BOARDFRAME_H_
#include <list> 
#include <gtkmm.h>

#include "Board.h"
#include "BoardConfiguration.h"

class BoardFrame: public Gtk::Frame {
  public:
    BoardFrame();
    ~BoardFrame();

    Board *getBoard();
    BoardConfiguration *obtenerConfiguracion();

  protected:
    std::vector<Gtk::TargetEntry> targetList;

    /* Métodos que manejan cuando se suelta un Button */
    void dragBlueButton(const Glib::RefPtr<Gdk::DragContext> &context,
                        Gtk::SelectionData &selection_data, guint info, 
                        guint time);
    void dragGreenButton(const Glib::RefPtr<Gdk::DragContext> &context,
                         Gtk::SelectionData &selection_data, guint info, 
                         guint time);
    void dragRedButton(const Glib::RefPtr<Gdk::DragContext> &context,
                       Gtk::SelectionData &selection_data, guint info, 
                       guint time);
    void dragVioletButton(const Glib::RefPtr<Gdk::DragContext> &context,
                          Gtk::SelectionData &selection_data, guint info, 
                          guint time);
    void dragYellowButton(const Glib::RefPtr<Gdk::DragContext> &context,
                          Gtk::SelectionData &selection_data, guint info, 
                          guint time);

    /* Métodos que manejan cuando se suelta una MiniBar */
    void dragBlueMiniBar(const Glib::RefPtr<Gdk::DragContext> &context,
                         Gtk::SelectionData &selection_data, guint info, 
                         guint time);
    void dragGreenMiniBar(const Glib::RefPtr<Gdk::DragContext> &context,
                          Gtk::SelectionData &selection_data, guint info, 
                          guint time);
    void dragRedMiniBar(const Glib::RefPtr<Gdk::DragContext> &context,
                        Gtk::SelectionData &selection_data, guint info, 
                        guint time);
    void dragVioletMiniBar(const Glib::RefPtr<Gdk::DragContext> &context,
                           Gtk::SelectionData &selection_data, guint info, 
                           guint time);
    void dragYellowMiniBar(const Glib::RefPtr<Gdk::DragContext> &context,
                           Gtk::SelectionData &selection_data, guint info, 
                           guint time);

    /* Método que maneja cuando se suelta una GoldenStar */
    void dragGoldenStar(const Glib::RefPtr<Gdk::DragContext> &context,
                        Gtk::SelectionData &selection_data, guint info, 
                        guint time);

	/* Método que maneja cuando se suelta un Hueco */
	void dragHueco(const Glib::RefPtr<Gdk::DragContext> &context,
                   Gtk::SelectionData &selection_data, guint info, 
                   guint time);
	
    Gtk::HBox mainHBox;
    Gtk::VBox herramientasVBox;
	Gtk::VBox miniBarVBox;
    Gtk::HBox tableroHBox;

    Gtk::HButtonBox botonesHBox;
    Gtk::HButtonBox miniBarHBox;
    Gtk::HButtonBox goldenStarHBox;
	Gtk::HButtonBox huecoHBox;

    Gtk::Frame herramientasFrame;
    Gtk::Frame buttonFrame;
    Gtk::Frame miniBarFrame;
    Gtk::Frame goldenStarFrame;
	Gtk::Frame huecoFrame;
    Gtk::Frame tableroFrame;

    Gtk::Button botonAzul;
    Gtk::Button botonVerde;
    Gtk::Button botonRojo;
    Gtk::Button botonVioleta;
    Gtk::Button botonAmarillo;

    Gtk::Button miniBarAzul;
    Gtk::Button miniBarVerde;
    Gtk::Button miniBarRojo;
    Gtk::Button miniBarVioleta;
    Gtk::Button miniBarAmarillo;
	
	Gtk::CheckButton verticalCheckButton;

    Gtk::Button goldenStar;
	
	Gtk::Button hueco;

    Board tablero;
};

#endif
